<?php

namespace support\Backend;
/**
 * 基础service
 */
class BackendService
{
    /**
     * model类
     * @var BackendModel
     */
    public BackendModel $model;

    /**
     * 获取分页列表
     * @param array $where 查询条件
     * @param array $field 查询字段
     * @param array $order 排序
     * @param array $with 关联表
     * @param int $limit 查询限制
     * @param string $page 查询页数
     * @return array
     */
    public function getListPage(array $where, array $field = ['*'], array $order = ['id'=>'desc'], array $with = [], int $limit = 10, string $page = 'page'): array
    {
        return $this->model->getPaginateList($where, $field, $order, $with, $limit, $page);
    }

    /**
     * 获取全部列表
     * @param array $where 查询条件
     * @param array $field 查询字段
     * @param array $order 排序
     * @param array $with 关联表
     * @return array
     */
    public function getList(array $where, array $field = ['*'], array $order = [], array $with = []): array
    {
        return $this->model->getAllList($where, $field, $order, $with);
    }

    /**
     * 根据主键ID获取详情
     * @param int $id 查询ID
     * @return array
     */
    public function getInfo(int $id): array
    {
        return $this->model->getInfoById($id);
    }

    /**
     * 根据查询条件详情
     * @param $where array 查询条件
     * @return array
     */
    public function getInfoByWhere($where): array
    {
        return $this->model->getInfoByWhere($where);
    }

    /**
     * 添加或者编辑
     * @param $data array
     * @return
     */
    public function edit($data)
    {
        $id = isset($data[$this->model->getKeyName()]) ? (int)$data[$this->model->getKeyName()] : 0;
        if ($id) {
            // 更新时间
            $data['update_time'] = time();
            // 置空添加时间
            if (isset($data['create_time'])) unset($data['create_time']);
        } else {
            // 添加时间
            $data['create_time'] = time();
        }
        $this->model->formatData($data, $id);

        if ($id) {
            $this->save($data, $id);
            $result = $id;
        } else {
            $result = $this->add($data);
        }
        return $result;
    }


    /**
     * 添加
     * @param $data array
     * @return
     */
    public function add(array $data)
    {
        return $this->model->insertOne($data);
    }

    /**
     * 根据主键id更新
     * @param $data
     * @param $id
     * @return
     */
    public function save($data, $id)
    {
        return $this->model->updateById($data, $id);
    }

    /**
     * 根据主键ID删除
     * @param $ids
     * @return
     */
    public function delete($ids)
    {
        return $this->model->updateByIds(['mark' => 0], $ids);
    }
}